﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct Students
{
	char name[20];//20
	int age;	  //4
	char sex;	  //1
	char tel[15]; //15		//40
};
typedef struct Students stu;

//main159&160：结构体按块二进制读写
int main159()
{
	stu s[5] = {
		{"李白",50,'M',"110"},
		{"李黑",40,'M',"120"},
		{"李逵",30,'F',"119"},
		{"李鬼",20,'F',"911"},
		{"李青",10,'M',"666"}
	};

	FILE* fp = fopen("../../../file/ConstructWriteBinaryFile.txt", "wb");
	if (!fp)
	{
		return -1;
	}

	for (int i = 0; i < 5; i++)
	{
		//1.fwrite和fread一样，都是读取一个地址，而不是一个值；
		fwrite(&s[i], sizeof(stu), 1, fp);
	}

	fclose(fp);

	system("pause");
	return EXIT_SUCCESS;
}
int main160(void)
{
	FILE* fp = fopen("../../../file/ConstructWriteBinaryFile.txt", "rb");
	if (!fp)
	{
		return -1;
	}

	stu s[5];
	int i = 0;
	while (!feof(fp))
	{
		//fread(&s[i], 20, 2, fp);
		fread(&s[i++], sizeof(stu), 1, fp);
	}
	fclose(fp);
	for (int i = 0; i < 5; i++)
	{
		printf("2.从二进制文件中获取学生信息，并输出，即：姓名：%s\t年龄：%d\t性别：%s\t电话：%s\n", s[i].name, s[i].age, s[i].sex == 'M' ? "男" : "女", s[i].tel);
		/*2.从二进制文件中获取学生信息，并输出，即：姓名：李白    年龄：50        性别：男        电话：110
		2.从二进制文件中获取学生信息，并输出，即：姓名：李黑    年龄：40        性别：男        电话：120
		2.从二进制文件中获取学生信息，并输出，即：姓名：李逵    年龄：30        性别：女        电话：119
		2.从二进制文件中获取学生信息，并输出，即：姓名：李鬼    年龄：20        性别：女        电话：911
		2.从二进制文件中获取学生信息，并输出，即：姓名：李青    年龄：10        性别：男        电话：666*/
	}

	printf("3.输出结构体stu的内存大小：%d\n", sizeof(stu));//40
	return 0;
}